<a href="https://html5css.ru/sql/sql_ref_mysql.php" target="_blank">https://html5css.ru/sql/sql_ref_mysql.php</a>
<!-- Start Document Outline -->

* [MySQL строковые функции](#mysql-строковые-функции)
	* [ASCII](#ascii)
	* [CHAR_LENGTH](#char_length)
	* [CHARACTER_LENGTH](#character_length)
	* [CONCAT](#concat)
		* [TR](#tr)
	* [CONCAT_WS](#concat_ws)
		* [TR](#tr-1)
	* [GROUP_CONCAT](#group_concat)
		* [TR](#tr-2)
	* [FIELD](#field)
		* [TR](#tr-3)
	* [FORMAT](#format)
	* [INSERT](#insert)
	* [INSTR](#instr)
		* [TR](#tr-4)
	* [LCASE](#lcase)
	* [LEFT](#left)
		* [TR](#tr-5)
	* [LENGTH](#length)
		* [TR](#tr-6)
	* [LOCATE](#locate)
		* [TR](#tr-7)
	* [LOWER](#lower)
		* [TR](#tr-8)
	* [LPAD](#lpad)
		* [TR](#tr-9)
	* [LTRIM](#ltrim)
		* [TR](#tr-10)
	* [MID](#mid)
		* [TR](#tr-11)
	* [POSITION](#position)
		* [TR](#tr-12)
	* [REPEAT](#repeat)
		* [TR](#tr-13)
	* [REPLACE](#replace)
		* [TR](#tr-14)
	* [REVERSE](#reverse)
		* [TR](#tr-15)
	* [RIGHT](#right)
		* [TR](#tr-16)
	* [RPAD](#rpad)
		* [TR](#tr-17)
	* [RTRIM](#rtrim)
	* [SPACE](#space)
		* [TR](#tr-18)
	* [STRCMP](#strcmp)
	* [SUBSTR](#substr)
		* [TR](#tr-19)
	* [SUBSTRING](#substring)
	* [SUBSTRING_INDEX](#substring_index)
		* [TR](#tr-20)
	* [TRIM](#trim)
		* [TR](#tr-21)
	* [UCASE](#ucase)
		* [TR](#tr-22)
	* [UPPER](#upper)
* [Цифровые функции MySQL](#цифровые-функции-mysql)
	* [ABS](#abs)
		* [TR](#tr-23)
	* [ACOS](#acos)
	* [ASIN](#asin)
	* [ATAN](#atan)
	* [ATAN2](#atan2)
	* [AVG](#avg)
		* [TR](#tr-24)
	* [CEIL](#ceil)
	* [CEILING](#ceiling)
		* [TR](#tr-25)
	* [COS](#cos)
	* [COT](#cot)
	* [COUNT](#count)
	* [DEGREES](#degrees)
	* [DIV](#div)
	* [EXP](#exp)
	* [FLOOR](#floor)
		* [TR](#tr-26)
	* [GREATEST](#greatest)
		* [TR](#tr-27)
	* [LEAST](#least)
		* [TR](#tr-28)
	* [LN](#ln)
	* [LOG](#log)
	* [LOG10](#log10)
	* [LOG2](#log2)
	* [MAX](#max)
		* [TR](#tr-29)
	* [MIN](#min)
		* [TR](#tr-30)
	* [MOD](#mod)
		* [TR](#tr-31)
	* [PI](#pi)
	* [POW](#pow)
		* [TR](#tr-32)
	* [POWER](#power)
	* [RADIANS](#radians)
	* [RAND](#rand)
		* [TR](#tr-33)
	* [ROUND](#round)
		* [TR](#tr-34)
	* [SIGN](#sign)
		* [TR](#tr-35)
	* [SIN](#sin)
	* [SQRT](#sqrt)
		* [TR](#tr-36)
	* [SUM](#sum)
		* [TR](#tr-37)
	* [TAN](#tan)
	* [TRUNCATE](#truncate)
		* [TR](#tr-38)
* [Дата](#дата)
	* [ADDDATE](#adddate)
	* [ADDTIME](#addtime)
	* [CURDATE](#curdate)
	* [CURRENT_DATE](#current_date)
		* [TR](#tr-39)
	* [CURRENT_TIME](#current_time)
		* [TR](#tr-40)
	* [CURRENT_TIMESTAMP](#current_timestamp)
	* [CURTIME](#curtime)
	* [DATE](#date)
		* [TR](#tr-41)
	* [DATEDIFF](#datediff)
	* [DATE_ADD](#date_add)
		* [TR](#tr-42)
	* [DATE_FORMAT](#date_format)
		* [TR](#tr-43)
	* [DATE_SUB](#date_sub)
		* [TR](#tr-44)
	* [DAY](#day)
		* [TR](#tr-45)
	* [DAYNAME](#dayname)
		* [TR](#tr-46)
	* [DAYOFMONTH](#dayofmonth)
	* [DAYOFWEEK](#dayofweek)
		* [TR](#tr-47)
	* [DAYOFYEAR](#dayofyear)
		* [TR](#tr-48)
	* [EXTRACT](#extract)
		* [TR](#tr-49)
	* [FROM_DAYS](#from_days)
	* [INTERVAL](#interval)
		* [TR](#tr-50)
			* [1](#1)
			* [2](#2)
	* [HOUR](#hour)
		* [TR](#tr-51)
			* [hour, minute, second](#hour-minute-second)
	* [LAST_DAY](#last_day)
	* [LOCALTIME](#localtime)
	* [LOCALTIMESTAMP](#localtimestamp)
	* [MAKEDATE](#makedate)
	* [MAKETIME](#maketime)
	* [MICROSECOND](#microsecond)
	* [MINUTE](#minute)
	* [MONTH](#month)
		* [TR](#tr-52)
	* [MONTHNAME](#monthname)
	* [NOW](#now)
		* [TR](#tr-53)
	* [PERIOD_ADD](#period_add)
	* [PERIOD_DIFF](#period_diff)
	* [QUARTER](#quarter)
	* [SECOND](#second)
	* [SEC_TO_TIME](#sec_to_time)
		* [TR](#tr-54)
	* [STR_TO_DATE](#str_to_date)
	* [SUBDATE](#subdate)
	* [SUBTIME](#subtime)
	* [SYSDATE](#sysdate)
	* [TIME](#time)
	* [TIME_FORMAT](#time_format)
		* [TR](#tr-55)
	* [TIME_TO_SEC](#time_to_sec)
		* [TR](#tr-56)
	* [TIMEDIFF](#timediff)
	* [TIMESTAMP](#timestamp)
	* [TO_DAYS](#to_days)
		* [TR](#tr-57)
	* [WEEK](#week)
		* [TR](#tr-58)
	* [WEEKDAY](#weekday)
		* [TR](#tr-59)
	* [WEEKOFYEAR](#weekofyear)
	* [YEAR](#year)
	* [YEARWEEK](#yearweek)
		* [TR](#tr-60)
* [Расширенные функции MySQL](#расширенные-функции-mysql)
	* [BIN](#bin)
	* [BINARY](#binary)
	* [CASE](#case)
	* [CAST](#cast)
	* [COALESCE](#coalesce)
	* [CONNECTION_ID](#connection_id)
	* [CONV](#conv)
	* [CONVERT](#convert)
	* [CURRENT_USER](#current_user)
	* [DATABASE](#database)
	* [SESSION_USER](#session_user)
	* [SYSTEM_USER](#system_user)
	* [USER](#user)
	* [VERSION](#version)

<!-- End Document Outline -->
# MySQL строковые функции
Функции	Описание
## ASCII
Возвращает код числа, представляющий конкретный символ
## CHAR_LENGTH
Возвращает длину указанной строки (в символах)
## CHARACTER_LENGTH
Возвращает длину указанной строки (в символах)
## CONCAT
Объединяет два или более выражений вместе
### TR
Функция `CONCAT` предназначена для сложения строк при выборке из базы данных. Строками обычно выступают поля таблиц.

См. также функцию `concat_ws`, которая складывает строки с использованием разделителя.

См. также функцию `group_concat`, которая складывает содержимое одного поля из разных строк.

Синтаксис

    SELECT CONCAT(поле1, поле2...) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:

    
    1	Дима	23	300
    2	Петя	24	400
    3	Вася	25	500

В данном примере при выборке из базы создается новое поле concat, в котором одновременно сольются 3 поля - age, name и salary:

    SELECT *, CONCAT(age, name, salary) as concat FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата	concat
    объединенное поле
    1	Дима	23	300	23Дима300
    2	Петя	24	400	24Петя400
    3	Вася	25	500	25Вася500

Давайте добавим после name 3 восклицательных знака:

    SELECT *, CONCAT(name, '!!!') as name FROM workers
SQL запрос выберет следующие строки:

    
    1	Дима!!!	23	300
    2	Петя!!!	24	400
    3	Вася!!!	25	500

Давайте добавим перед name 3 восклицательных знака, а после него - 3 вопросительных:

    SELECT *, CONCAT('!!!', name, '???') as name FROM workers
SQL запрос выберет следующие строки:

    
    1	!!!Дима???	23	300
    2	!!!Петя???	24	400
    3	!!!Вася???	25	500

## CONCAT_WS
Объединяет два или более выражений вместе и добавляет разделитель между ними
### TR
Функция `CONCAT_WS` предназначена для сложения строк при выборке из базы данных с использованием разделителя. Строками обычно выступают поля таблиц.

См. также функцию `concat`, которая складывает строки без использования разделителя.

См. также функцию `group_concat`, которая складывает содержимое одного поля из разных строк.

Синтаксис

    SELECT CONCAT_WS(разделитель, поле1, поле2...) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	300
    2	Петя	24	400
    3	Вася	25	500

В данном примере при выборке из базы создается новое поле concat_ws, в котором одновременно сольются через дефис 3 поля - age, name и salary:

    SELECT *, CONCAT_WS('-', age, name, salary) as concat_ws FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата	concat_ws
    объединенное поле
    1	Дима	23	300	23-Дима-300
    2	Петя	24	400	24-Петя-400
    3	Вася	25	500	25-Вася-500
    
А теперь кроме полей из базы добавится еще и строка '!!!':

    SELECT *, CONCAT_WS('-', age, '!!!', salary) as concat_ws FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата	concat_ws
    объединенное поле
    1	Дима	23	300	23-!!!-300
    2	Петя	24	400	24-!!!-400
    3	Вася	25	500	25-!!!-500

Меняем таблицу для примеров
Остальные примеры будут по этой таблице workers:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата	separator
    разделитель
    1	Дима	23	300	-
    2	Петя	24	400	@
    3	Вася	25	500	!

Разделителем может быть не только строка, но и поле таблицы. Давайте сделаем содержимое поля separator разделителем между age, name, salary:

    SELECT *, CONCAT_WS(separator, age, name, salary) as concat_ws FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата	separator
    разделитель	concat_ws
    объединенное поле
    1	Дима	23	300	-	23-Дима-300
    2	Петя	24	400	@	24@Петя@400
    3	Вася	25	500	!	25!Вася!500
## GROUP_CONCAT
### TR
Функция `GROUP_CONCAT` складывает (как строки) содержимое одного поля из разных строк, вставляя между ними разделитель (по умолчанию это запятая).

К примеру, можно получить список всех выбранных имен через запятую или другой разделитель.

Внимание: у этой функции есть ограничение на объем выводимых данных. По умолчанию 1024 символа для каждого объединения - для каждой выводимой строки. Если размер склеенных данных больше, то он будет урезаться.

Чтобы расширить размер нужно выполнить команду 

    SET group_concat_max_len = 4096;

Если у вас есть привилегии, то вы расширите объем получаемых данных до 4096, можно и больше. Но чаще всего на обычных хостингах таких привилегий нет.

См. также команду `group by`, с помощью которой можно группировать строки для использования `group_concat`.

См. также функции `concat` и `concat_ws` которые складывают колонки одной строки.

Синтаксис
Без указания разделителя (по умолчанию это будет запятая):

    SELECT GROUP_CONCAT(поле) FROM имя_таблицы WHERE условие
С указанием разделителя:

    SELECT GROUP_CONCAT(поле SEPARATOR разделитель) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст
    1	Дима	23
    2	Петя	23
    3	Вася	23
    4	Коля	24
    5	Иван	24
    6	Кирилл	25

В данном примере запрос находит все имена в таблицы и выводит их через запятую:

    SELECT GROUP_CONCAT(name) as name FROM workers
SQL запрос выберет следующие строки:

    name
    имена
    Дима,Петя,Вася,Коля,Иван,Кирилл

В данном примере разделитель меняется на '+' с помощью команды separator:

    SELECT GROUP_CONCAT(name SEPARATOR '+') as name FROM workers
SQL запрос выберет следующие строки:

    name
    имена
    Дима+Петя+Вася+Коля+Иван+Кирилл

В данном примере с помощью команды where выбираются не все строки, а заданные:

    SELECT GROUP_CONCAT(name) as name FROM workers WHERE id>=3 AND id<=5
SQL запрос выберет следующие строки:

    name
    имена
    Вася,Коля,Иван

В данном примере с помощью команды group by строки группируются по возрасту и для каждой группы через запятую выводятся имена работников с таким возрастом:

    SELECT age, GROUP_CONCAT(name) as name FROM workers GROUP BY age
SQL запрос выберет следующие строки:

    age
    возраст	name
    имена
    23	Дима,Петя,Вася
    24	Коля,Иван
    25	Кирилл

Поменяем разделитель на '-':

    SELECT age, GROUP_CONCAT(name SEPARATOR '-') as name FROM workers GROUP BY age
SQL запрос выберет следующие строки:

    age
    возраст	name
    имена
    23	Дима-Петя-Вася
    24	Коля-Иван
    25	Кирилл

## FIELD
Возвращает положение значения в списке значений
### TR
Функция `FIELD` ищет поле, которое содержит в себе заданный текст, и возвращает его номер (нумерация с единицы).

Текст передается первым параметром, а поля, в которых искать - остальными параметрами. Вместо полей могут быть строки или числа.

Если строка не найдена, возвращается 0.

См. также функцию `elt, которое выбирает поле по его номеру.

См. также функцию `field`, которое выбирает поле по его содержимому.

См. также функцию `greatest`, которая находит максимальное из значений.

См. также функцию `least`, которая находит минимальное из значений.

Синтаксис

    SELECT FIELD(строка, поле1, поле2...) FROM имя_таблицы WHERE условие
 Примеры
Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	field1
    поле1	field2
    поле2	field3
    поле3
    1	строка1	строка2	строка3
    2	строка3	строка2	строка1
    3	строка2	строка1	строка3
   
В данном примере с помощью field ищется номер поля со значением 'строка1':

    SELECT *, FIELD('строка1', field1, field2, field3) as number FROM texts
     
SQL запрос выберет следующие строки:

    id
    айди	field1
    поле1	field2
    поле2	field3
    поле3	number
    номер поля
    1	строка1	строка2	строка3	1
    2	строка3	строка2	строка1	3
    3	строка2	строка1	строка3	2
Возвращает положение строки в списке строк
## FORMAT
Форматирует число как формат "#, # # #. # #", округляя его до определенного числа десятичных разрядов
## INSERT
Вставляет подстроку в строку в заданной позиции для определенного числа символов
## INSTR
 Возвращает позицию первого вхождения строки в другую строку
### TR
Функция `INSTR` осуществляет поиск подстроки в строке, возвращает позицию ее первого символа.

Учтите, что нумерация символов начинается с 1.

В отличие от функции `position` функция `instr` имеет обратный порядок параметров.

См. функции `position` и `locate`, которые также осуществляют поиск по строке.

Синтаксис

    SELECT INSTR(поле, что_ищем) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	Очень длинный текст!
    2	Не очень длинный текст!
    3	Просто текст!

В данном примере в тексте ищется позиция слова 'длинный':

    SELECT *, INSTR(text, 'длинный') as pos FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст	pos
    позиция подстроки
    1	Очень длинный текст!	7
    2	Не очень длинный текст!	10
    3	Просто текст!	0
## LCASE
Преобразует строку в нижний регистр
## LEFT
Извлекает подстроку из строки (начиная с левого)
### TR
Функция `LEFT` вырезает и возвращает заданное количество символов с начала строки.

См. также функцию `right`, которая вырезает символы с конца строки.

См. также функции `substring` и `mid` которые вырезают символы с любого места строки.

См. также функцию `substring_index`, которая берет часть строки по указанному разделителю.

Синтаксис

    SELECT LEFT(поле, сколько_символов_взять) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице texts, если не сказано иное:
    
    id
    айди	text
    текст
    1	Первый длинный текст с номером 1!
    2	Второй длинный текст с номером 2!

Давайте вырежем первые 6 символов с начала строки:

    SELECT id, LEFT(text, 6) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	Первый
    2	Второй

Давайте вырежем первые 6 символов с начала строки и добавим троеточие в конец, используя функцию concat:

    SELECT id, CONCAT(LEFT(text, 6), '...') as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	Первый...
    2	Второй...

## LENGTH
Возвращает длину указанной строки (в байтах)
### TR 
Функция `LENGTH` используется для подсчета количества символов в строках.

Вместо `length` можно использовать следующие названия: `octet_length`, `char_length`, `character_length`.

Существует также функция `bit_length`, которая возвращает длину в битах.

Синтаксис

    SELECT LENGTH(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:
    
    id
    айди	name
    имя
    1	Дмитрий
    2	Кирилл
    3	Владимир

В данном примере создается дополнительное поле, которое содержит длину поля name:

    SELECT *, LENGTH(name) as length FROM workers
SQL запрос выберет следующие строки:
    
    id
    айди	name
    имя	length
    длина строки
    1	Дмитрий	7
    2	Кирилл	6
    3	Владимир	8

В данном примере с помощью условия where выбираются только те записи, в которых длина поля name больше или равна 7:

    SELECT *, LENGTH(name) as length FROM workers WHERE LENGTH(name)>=7
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	length
    длина строки
    1	Дмитрий	7
    3	Владимир	8
     
Конечно, не обязательно делать поле length, чтобы применить функцию length в условии:

    SELECT * FROM workers WHERE LENGTH(name)>=7
SQL запрос выберет следующие строки:
    
    id
    айди	name
    имя
    1	Дмитрий
    3	Владимир

## LOCATE
Возвращает позицию первого вхождения подстроки в строку
### TR
Функция `LOCATE` осуществляет поиск подстроки в строке, возвращает позицию ее первого символа.

Учтите, что нумерация символов начинается с 1.

В отличие от функции `POSITION` функция `LOCATE` может начинать поиск не с начала строки, а с определенного места.

См. функции `position` и `instr`, которые также осуществляют поиск по строке.

Синтаксис
    
    SELECT LOCATE(что_ищем, поле) FROM имя_таблицы WHERE условие
    SELECT LOCATE(что_ищем, поле, начало_поиска) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	Очень длинный текст!
    2	Не очень длинный текст!
    3	Просто текст!

В данном примере в тексте ищется позиция слова 'длинный':

    SELECT *, LOCATE('длинный', text) as pos FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст	pos
    позиция подстроки
    1	Очень длинный текст!	7
    2	Не очень длинный текст!	10
    3	Просто текст!	0

В данном примере в тексте ищется позиция слова 'длинный', поиск начинается с 8-го символа строки:

    SELECT *, LOCATE('длинный', text, 8) as pos FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст	pos
    позиция подстроки
    1	Очень длинный текст!	0
    2	Не очень длинный текст!	10
    3	Просто текст!	0
## LOWER
Преобразует строку в нижний регистр
### TR
Функция `LCASE` (`LOWER`) переводит строку в нижний регистр (то есть из больших букв делает маленькие).

См. также команду `ucase` (`upper`), которая переводит строку в нижний регистр.

Синтаксис
    
    SELECT LCASE(поле) FROM имя_таблицы WHERE условие
    SELECT LOWER(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	300
    2	Петя	24	400
    3	Вася	25	500

В данном примере строка name преобразуется к нижнему регистру с помощью lcase:

    SELECT *, LCASE(name) as name FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	дима	23	300
    2	петя	24	400
    3	вася	25	500

В данном примере строка name преобразуется к нижнему регистру с помощью lower:

    SELECT *, LOWER(name) as name FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	дима	23	300
    2	петя	24	400
    3	вася	25	500
## LPAD
Возвращает строку, которая заполнена с заданной строкой до определенной длины
### TR
Функция `LPAD` дополняет строку до нужного размера добавляя заданные символы в начало строки.

См. также функцию `rpad`, которая дополняет строку справа до заданного размера.

Синтаксис
    
    SELECT LPAD(поле, новый_размер_поля, чем_дополнить) FROM имя_таблицы WHERE условие
     
Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	текст1
    2	текст2
    2	длинный текст3

В данном примере в текст добавляет символ * так, чтобы длина строки стала 10:

    SELECT id, LPAD(text, 10, '*') as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	****текст1
    2	****текст2
    2	длинный те

## LTRIM
Удаление начальных пробелов из строки
### TR
Функция `LTRIM` обрезает пробелы, которые стоят в начале строки.

См. команды `trim` и `rtrim`, которая также обрезают пробелы.

Синтаксис
При выборке:

SELECT LTRIM(поле) FROM имя_таблицы WHERE условие
При вставке:

    INSERT INTO имя_таблицы SET имя_поля=LTRIM(значение_поля)

Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	___Дима___	23	300
    2	___Петя___	24	400
    3	___Вася___	25	500

В данном примере при выборке будут удалены пробелы слева:

    SELECT *, LTRIM(поле) as name FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима___	23	300
    2	Петя___	24	400
    3	Вася___	25	500

В данном примере при вставке будут удалены пробелы слева (подчеркивание имитирует пробелы):

    INSERT INTO workers SET name=LTRIM('   Кирилл   '), age=26, salary=600
Таблица workers станет выглядеть так:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	___Дима___	23	300
    2	___Петя___	24	400
    3	___Вася___	25	500
    4	Кирилл___	26	600
## MID
Извлекает подстроку из строки (начиная с любой позиции)
### TR 
Функция `MID` вырезает и возвращает заданное количество символов из строки.

Первым параметром функция принимает поле или строку, вторым параметром - с какой позиции начинать вырезания (нумерация символов начинается с 1), третьем параметром - сколько символов брать.

Третий параметр не является обязательным. Если он не указан, текст будет вырезан с указанной позиции и до конца строки.

См. также функцию `substring`, которая также вырезает часть строки.

См. также функцию `substring_index`, которая берет часть строки по указанному разделителю.

Синтаксис
С тремя параметрами:

    SELECT MID(поле, откуда_отрезать, сколько_символов_взять) FROM имя_таблицы WHERE условие
     
Третий параметр не обязателен:
    
    SELECT MID(поле, откуда_отрезать) FROM имя_таблицы WHERE условие


Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	Это первый длинный текст!
    2	Это второй длинный текст!

В данном примере из строки вырезаются и возвращаются 6 символов, начиная с 5-го:

    SELECT id, MID(text, 5, 6) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	первый
    2	второй

В данном примере возвращается вся строка до конца, начиная с пятого символа:

    SELECT id, MID(text, 5) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	первый длинный текст!
    2	второй длинный текст!

## POSITION
Возвращает позицию первого вхождения подстроки в строку
### TR
Функция `POSITION` осуществляет поиск подстроки в строке, возвращает позицию ее первого символа.

Учтите, что нумерация символов начинается с 1.

См. функции `locate` и `instr`, которые также осуществляют поиск по строке.

Синтаксис
    
    SELECT POSITION(что_ищем IN поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	Очень длинный текст!
    2	Не очень длинный текст!
    3	Просто текст!

В данном примере в тексте ищется позиция слова 'длинный':

    SELECT *, POSITION('длинный' IN text) as pos FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст	pos
    позиция подстроки
    1	Очень длинный текст!	7
    2	Не очень длинный текст!	10
    3	Просто текст!	0
## REPEAT
Повторяет строку указанное количество раз
### TR
Функция `REPEAT` повторяет заданную строку нужное количество раз.

Синтаксис
    
    SELECT REPEAT(поле, количество_повторений) FROM имя_таблицы WHERE условие
     
Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	текст1
    2	текст2

В данном примере текст поля при выборке повторится 3 раза:

    SELECT id, REPEAT(text, 3) as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	текст1текст1текст1
    2	текст2текст2текст2

## REPLACE
Заменяет все вхождения указанной строки
### TR
Функция `REPLACE` позволяет производить поиск и замену одних частей строки на другие.

См. также функции `position`, `locate` и `instr`, которые осуществляют поиск по строке.

Синтаксис
    
    SELECT REPLACE(поле, что_менять, на_что_менять) FROM имя_таблицы WHERE условие
     
Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	Первый длинный текст!
    2	Второй длинный текст!

В данном примере все пробелы в тексте будут замены на дефис:

    SELECT id, REPLACE(text, ' ', '-') as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	Первый-длинный-текст!
    2	Второй-длинный-текст!

## REVERSE
Изменяет строку и возвращает результат
### TR
Функция `REVERSE` переворачивает заданную строку так, чтобы ее символы шли в обратном порядке

Синтаксис
    
    SELECT REVERSE(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	12345
    2	abcde
 
В данном примере символы текста при выборке будут идти в обратном порядке:

    SELECT id, REVERSE(text) as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	54321
    2	edcba
## RIGHT
Извлекает подстроку из строки (начиная справа)
### TR
Функция `RIGHT` вырезает и возвращает заданное количество символов с конца строки.

См. также функцию `left`, которая вырезает символы с начала строки.

См. также функции `substring` и `mid` которые вырезают символы с любого места строки.

См. также функцию `substring_index`, которая берет часть строки по указанному разделителю.

Синтаксис
    
    SELECT RIGHT(поле, сколько_символов_взять) FROM имя_таблицы WHERE условие
     
Все примеры будут по этой таблице texts, если не сказано иное:
    
    id
    айди	text
    текст
    1	Первый длинный текст с номером 1!
    2	Второй длинный текст с номером 2!

Давайте вырежем и выведем 10 символов с конца строки:

    SELECT id, RIGHT(text, 10) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	номером 1
    2	номером 2
     
Давайте вырежем и выведем 10 символов с конца строки и перед ними добавим троеточие, используя функцию concat:

    SELECT id, CONCAT('...', RIGHT(text, 10)) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	...номером 1
    2	...номером 2

## RPAD
Возвращает строку, которая имеет правую прокладку с указанной строкой до определенной длины
### TR 
Функция `RPAD` дополняет строку до нужного размера добавляя заданные символы в конец строки.

См. также функцию `lpad`, которая дополняет строку слева до заданного размера.

Синтаксис

    SELECT RPAD(поле, новый_размер_поля, чем_дополнить) FROM имя_таблицы WHERE условие
     
Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	текст1
    2	текст2
    2	длинный текст3

В данном примере в текст добавляет символ * так, чтобы длина строки стала 10:

    SELECT id, RPAD(text, 10, '*') as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	текст1****
    2	текст2****
    2	длинный те

## RTRIM
Удаляет замыкающие пробелы из строки
Функция `RTRIM` обрезает пробелы, которые стоят в конце строки.

См. команды `trim` и `ltrim`, которая также обрезают пробелы.

Синтаксис
При выборке:

    SELECT RTRIM(поле) FROM имя_таблицы WHERE условие
При вставке:

    INSERT INTO имя_таблицы SET имя_поля=RTRIM(значение_поля)

Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	___Дима___	23	300
    2	___Петя___	24	400
    3	___Вася___	25	500

В данном примере при выборке будут удалены пробелы справа:

    SELECT *, RTRIM(поле) as name FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	___Дима	23	300
    2	___Петя	24	400
    3	___Вася	25	500

В данном примере при вставке будут удалены пробелы справа (подчеркивание имитирует пробелы):

    INSERT INTO workers SET name=RTRIM('   Кирилл   '), age=26, salary=600
Таблица workers станет выглядеть так:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	___Дима___	23	300
    2	___Петя___	24	400
    3	___Вася___	25	500
    4	___Кирилл	26	600
## SPACE
Возвращает строку с заданным количеством пробелов
### TR
Функция SPACE создает строку, состоящую из заданного количества пробелов.

Синтаксис

    SELECT SPACE(количество_пробелов) FROM имя_таблицы WHERE условие
## STRCMP
Проверяет, совпадают ли две строки
## SUBSTR
Извлекает подстроку из строки (начиная с любой позиции)
### TR
Функция `SUBSTRING` вырезает и возвращает заданное количество символов из строки.

Первым параметром функция принимает поле или строку, вторым параметром - с какой позиции начинать вырезания (нумерация символов начинается с 1), третьем параметром - сколько символов брать.

Третий параметр не является обязательным. Если он не указан, текст будет вырезан с указанной позиции и до конца строки.

См. также функцию `mid`, которая также вырезает часть строки.

См. также функцию `substring_index`, которая берет часть строки по указанному разделителю.

Синтаксис
Первый синтаксис:
    
    SELECT SUBSTRING(поле, откуда_отрезать, сколько_символов_взять) FROM имя_таблицы WHERE условие
     
Альтернативный синтаксис:

    SELECT SUBSTRING(поле FROM откуда_отрезать FOR сколько_символов_взять) FROM имя_таблицы WHERE условие
     
Третий параметр не обязателен, в этом случае текст будет вырезан с указанной позиции и до конца строки:
    
    SELECT SUBSTRING(поле, откуда_отрезать) FROM имя_таблицы WHERE условие
    SELECT SUBSTRING(поле FROM откуда_отрезать) FROM имя_таблицы WHERE условие
     
Все примеры будут по этой таблице texts, если не сказано иное:

    id
    айди	text
    текст
    1	Это первый длинный текст!
    2	Это второй длинный текст!

В данном примере из строки вырезаются и возвращаются 6 символов, начиная с 5-го:

    SELECT id, SUBSTRING(text, 5, 6) as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	первый
    2	второй
Запрос можно переписать в следующем виде:

    SELECT id, SUBSTRING(text FROM 5 FOR 6) as text FROM texts

В данном примере возвращается вся строка до конца, начиная с пятого символа:

    SELECT id, SUBSTRING(text, 5) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	первый длинный текст!
    2	второй длинный текст!
    
Запрос можно переписать в следующем виде:

    SELECT id, SUBSTRING(text FROM 5) as text FROM texts
## SUBSTRING
Извлекает подстроку из строки (начиная с любой позиции)
## SUBSTRING_INDEX
Возвращает подстроку строки перед числом вхождений разделителя
### TR
Функция `SUBSTRING_INDEX` возвращает подстроку из строки перед появлениям N вхождений разделителя.

Если N положителен, то возвращается все, что находится слева от последнего разделителя (считая слева). Если N отрицателен, то возвращается все, что находится справа от последнего разделителя (считая справа).

См. также функцию `left`, которая вырезает символы с начала строки.

См. также функцию `right`, которая вырезает символы с конца строки.

См. также функции `substring` и `mid` которые вырезают символы с любого места строки.

Синтаксис
    
    SELECT SUBSTRING_INDEX(поле, разделитель, количество_разделителей)
    	FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице texts, если не сказано иное:
    
    id
    айди	text
    текст
    1	слово1-слово2-слово3-слово4-слово5
    2	word1-word2-word3-word4-word5

В данном примере вернется подстрока перед первым вхождением разделителя '-':

    SELECT *, SUBSTRING_INDEX(text, '-', 1) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	слово1
    2	word1

В данном примере вернется подстрока перед вторым вхождением разделителя '-':

    SELECT *, SUBSTRING_INDEX(text, '-', 2) as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	слово1-слово2
    2	word1-word2

В данном примере вернется подстрока перед третьим вхождением разделителя '-':

    SELECT *, SUBSTRING_INDEX(text, '-', 3) as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	слово1-слово2-слово3
    2	word1-word2-word3

В данном примере вернется подстрока перед первым с конца вхождением разделителя '-':

    SELECT *, SUBSTRING_INDEX(text, '-', -1) as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	слово5
    2	word5

В данном примере вернется подстрока перед вторым с конца вхождением разделителя '-':

    SELECT *, SUBSTRING_INDEX(text, '-', -2) as text FROM texts
SQL запрос выберет следующие строки:

    id
    айди	text
    текст
    1	слово4-слово5
    2	word4-word5

В данном примере вернется подстрока перед третьим с конца вхождением разделителя '-':

    SELECT *, SUBSTRING_INDEX(text, '-', -3) as text FROM texts
SQL запрос выберет следующие строки:
    
    id
    айди	text
    текст
    1	слово3-слово4-слово5
    2	word3-word4-word5

## TRIM
Удаление начальных и конечных пробелов из строки
### TR
Функция `TRIM` обрезает пробелы по краям строки.

См. команды `lrim` и `rtrim`, которая также обрезают пробелы.

Синтаксис
При выборке:

    SELECT TRIM(поле) FROM имя_таблицы WHERE условие
При вставке:

    INSERT INTO имя_таблицы SET имя_поля=TRIM(значение_поля)

Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	___Дима___	23	300
    2	___Петя___	24	400
    3	___Вася___	25	500
 
В данном примере при выборке будут удалены пробелы по краям строки:

    SELECT *, TRIM(поле) as name FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	300
    2	Петя	24	400
    3	Вася	25	500
 
В данном примере при вставке будут удалены пробелы по краям строки (подчеркивание имитирует пробелы):

    INSERT INTO workers SET name=TRIM('   Кирилл   '), age=26, salary=600
Таблица workers станет выглядеть так:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	___Дима___	23	300
    2	___Петя___	24	400
    3	___Вася___	25	500
    4	Кирилл	26	600
## UCASE
Преобразует строку в верхний регистр
### TR
Функция `UCASE` (`UPPER`) переводит строку в верхний регистр (то есть из маленьких букв делает большие).

См. также команду `lcase` (`lower`), которая переводит строку в нижний регистр.

Синтаксис
    
    SELECT UCASE(поле) FROM имя_таблицы WHERE условие
    SELECT UPPER(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное. Подчеркивание имитирует пробелы:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	300
    2	Петя	24	400
    3	Вася	25	500

В данном примере строка name преобразуется к верхнему регистру с помощью ucase:

    SELECT *, UCASE(name) as name FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	ДИМА	23	300
    2	ПЕТЯ	24	400
    3	ВАСЯ	25	500

В данном примере строка name преобразуется к верхнему регистру с помощью upper:

    SELECT *, UPPER(name) as name FROM workers
SQL запрос выберет следующие строки:
    
    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	ДИМА	23	300
    2	ПЕТЯ	24	400
    3	ВАСЯ	25	500

## UPPER
Преобразует строку в верхний регистр
# Цифровые функции MySQL
Функции	Описание
## ABS
Возвращает абсолютное значение числа
### TR
Функция `ABS` находит модуль числа, то есть из отрицательного делает положительное.

См. также функцию `sign`, которая определяет знак числа.

Синтаксис

    SELECT ABS(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице weather, если не сказано иное:

    id
    айди	date
    дата	temperature
    температура
    1	2010-12-01	-15
    2	2010-12-02	-25
    3	2010-06-01	15

В данном примере при выборке их базы выводится абсолютное значение температуры (то есть минусы отбрасываются):

    SELECT *, ABS(temperature) as temperature FROM weather
SQL запрос выберет следующие строки:

    id
    айди	date
    дата	temperature
    температура
    1	2010-12-01	15
    2	2010-12-02	25
    3	2010-06-01	15

Давайте выберем все записи, в которых абсолютное значение температуры меньше 20-ти:

    SELECT * FROM weather WHERE ABS(temperature)<20
SQL запрос выберет следующие строки:

    id
    айди	date
    дата	temperature
    температура
    1	2010-12-01	-15
    3	2010-06-01	15
## ACOS
Возвращает дугу косинуса числа
## ASIN
Возвращает синус дуги числа
## ATAN
Возвращает тангенс дуги числа или тангенса дуги n и m
## ATAN2
Возвращает тангенс дуги n и m
## AVG
Возвращает среднее значение выражения
### TR
Функция `AVG` возвращает среднее арифметическое по всем найденным записям. Среднее арифметическое группы чисел - это их сумма, деленная на их количество.

К примеру, у нас есть таблица с пользователями, в которой хранятся их возраста. С помощью `AVG` мы можем найти их средний возраст.

См. также функцию sum, которая суммирует значение указанного поля по всем полученным записям.

Синтаксис
    
    SELECT AVG(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100
    2	Петя	24	200
    3	Вася	25	300

Давайте найдем среднюю зарплату по всей таблице:

    SELECT AVG(salary) as avg FROM workers
Результат выполнения SQL запроса:

    avg
    средняя зарплата
    200

## CEIL
Возвращает наименьшее целое значение, превышающее или равное числу
## CEILING
Возвращает наименьшее целое значение, превышающее или равное числу
### TR
Функция `CEILING` используется для округления дробей до целого в большую сторону.

См. также функцию `round`, которая округляет дроби до нужного знака или до целого числа.

См. также функцию `floor`, которая округляет дроби в меньшую сторону.

См. также функцию `truncate`, которая усекает числа до нужного знака.

Синтаксис

    SELECT CEILING(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100.1
    2	Петя	24	200.4
    3	Вася	25	300.9

В данном примере дробная зарплата округляется до целых в большую сторону:

    SELECT *, CEILING(salary) as ceiling_salary FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата	ceiling_salary
    округленная зарплата
    1	Дима	23	100.1	101
    2	Петя	24	200.4	201
    3	Вася	25	300.9	301
## COS
Возвращает косинус числа
## COT
Возвращает котангенс числа
## COUNT
Возвращает количество записей в запросе SELECT
## DEGREES
Преобразует значение радиан в градусы
## DIV
Используется для целочисленного деления
## EXP
Возвращает значение e, возведенное в силу числа
## FLOOR
Возвращает наибольшее целочисленное значение, меньшее или равное числу
### TR
Функция `FLOOR` используется для округления дробей до целого в меньшую сторону.

См. также функцию `round`, которая округляет дроби до нужного знака или до целого числа.

См. также функцию `ceiling`, которая округляет дроби в большую сторону.

См. также функцию `truncate`, которая усекает числа до нужного знака.

Синтаксис

    SELECT FLOOR(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100.1
    2	Петя	24	200.4
    3	Вася	25	300.9

В данном примере дробная зарплата округляется до целых в меньшую сторону:

    SELECT *, FLOOR(salary) as floor_salary FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата	floor_salary
    округленная зарплата
    1	Дима	23	100.1	100
    2	Петя	24	200.4	200
    3	Вася	25	300.9	301
## GREATEST
Возвращает наибольшее значение в списке выражений
### TR
Функция `GREATEST` выбирает максимальное из значений. Значениями могут выступать поля, а также строки и числа.

См. также функцию `least`, которая находит минимальное из значений.

См. также функцию `elt`, которое выбирает поле по его номеру.

См. также функцию `field`, которое выбирает поле по его содержимому.

Синтаксис
В полях:

    SELECT GREATEST(число1, число2...) FROM имя_таблицы WHERE условие
Функцию `GREATEST` можно также использовать в условиях `WHERE`.


Все примеры будут по этой таблице numbers, если не сказано иное (красным цветом обозначены максимальные значения в ряду, среди полей number1, number2 и number3):

    id
    айди	number1
    число1	number2
    число1	number3
    число1
    1	5	4	3
    1	-2	0	3
    2	a	b	c

В данном примере выбирается максимальное значение среди заданных колонок:

    SELECT id, GREATEST(number1, number2, number3) as number FROM numbers
SQL запрос выберет следующие строки:

    id
    айди	number
    число
    1	5
    1	3
    2	c
## LEAST
Возвращает наименьшее значение в списке выражений
### TR
Функция `LEAST` выбирает минимальное из значений. Значениями могут выступать поля, а также строки и числа.

См. также функцию `greatest`, которая находит максимальное из значений.

См. также функцию `elt`, которое выбирает поле по его номеру.

См. также функцию `field`, которое выбирает поле по его содержимому.

Синтаксис
В полях:

    SELECT LEAST(число1, число2...) FROM имя_таблицы WHERE условие
Функцию `LEAST` можно также использовать в условиях `WHERE`.


Все примеры будут по этой таблице numbers, если не сказано иное (красным цветом обозначены минимальные значения в ряду, среди полей number1, number2 и number3):

    id
    айди	number1
    число1	number2
    число1	number3
    число1
    1	5	4	3
    1	-2	0	3
    2	a	b	c
 
В данном примере выбирается минимальное значение среди заданных колонок:

    SELECT id, LEAST(number1, number2, number3) as number FROM numbers
SQL запрос выберет следующие строки:

    id
    айди	number
    число
    1	3
    1	-2
    2	a
## LN
Возвращает натуральный логарифм числа
## LOG
Возвращает натуральный логарифм числа или логарифм числа к указанному базовому
## LOG10
Возвращает логарифм Base-10 числа
## LOG2
Возвращает логарифм Base-2 числа
## MAX
Возвращает максимальное значение выражения
### TR
Функция `MAX` возвращает максимальное значение поля среди найденных строк.

См. также функцию `min`, которая возвращает минимальное значение.

Синтаксис

    SELECT MAX(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	300
    2	Петя	23	400
    3	Вася	24	500
    4	Коля	25	600
    5	Иван	25	700

Давайте найдем максимальное значение зарплаты в таблице:

    SELECT MAX(salary) as max FROM workers
Результат выполнения SQL запроса:

    max
    максимальная зарплата
    700
    Давайте найдем максимальное значение зарплаты среди тех записей, у которых id меньше или равен 4-м:

 
Давайте найдем максимальное значение зарплаты среди тех записей, у которых id меньше или равен 4-м:

    SELECT MAX(salary) as max FROM workers WHERE id<=4
Результат выполнения SQL запроса:

    min
    максимальная зарплата
    600

Давайте найдем максимальное и минимальное значение зарплаты одновременно:

    SELECT MAX(salary) as max, MIN(salary) as min FROM workers
Результат выполнения SQL запроса:

    max
    максимальная зарплата	min
    минимальная зарплата
    700	300


## MIN
Возвращает минимальное значение выражения
### TR
Функция `MIN` возвращает минимальное значение поля среди найденных строк.

См. также функцию max, которая возвращает максимальное значение.

Синтаксис
    
    SELECT MIN(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	300
    2	Петя	23	400
    3	Вася	24	500
    4	Коля	25	600
    5	Иван	25	700

Давайте найдем минимальное значение зарплаты в таблице:

    SELECT MIN(salary) as min FROM workers
Результат выполнения SQL запроса:

    min
    минимальная зарплата
    300

Давайте найдем минимальное значение зарплаты среди тех записей, у которых id больше или равен 2-м:

    SELECT MIN(salary) as min FROM workers WHERE id>=2
Результат выполнения SQL запроса:

    min
    минимальная зарплата
    400

Давайте найдем максимальное и минимальное значение зарплаты одновременно:

SELECT MIN(salary) as min, MAX(salary) as max FROM workers
Результат выполнения SQL запроса:

    min
    минимальная зарплата	max
    максимальная зарплата
    300	700

## MOD
Возвращает остаток n, деленный на m
### TR
Функция `MOD` находит остаток от деления одного числа на другое.

Вместо `mod` можно использовать операцию `%`, которая делает то же самое.

Синтаксис
Функция MOD:

    SELECT MOD(что_делить, на_что_делить) FROM имя_таблицы WHERE условие
Альтернативный синтаксис с %:

    SELECT что_делить % на_что_делить FROM имя_таблицы WHERE условие

Первый пример будет по этой таблице numbers:

    id
    айди	number
    число
    1	10
    2	8
    3	11

В данном примере находится остаток от деления столбца number на 3:

    SELECT *, MOD(number, 3) as mod FROM numbers
SQL запрос выберет следующие строки:

    id
    айди	number
    число	mod
    остаток от деления
    1	10	1
    2	8	2
    3	11	2
Запрос можно переписать следующим образом:

    SELECT id, number % 3 as mod FROM numbers
Меняем таблицу для примеров
Остальные примеры будут по этой таблице numbers:

    id
    айди	number1
    число1	number2
    число2
    1	10	3
    2	8	5
    3	14	4

В данном примере находится остаток от деления столбца number1 на number2:

    SELECT *, MOD(number1, number2) as mod FROM numbers
SQL запрос выберет следующие строки:

    id
    айди	number1
    число1	number2
    число2	mod
    остаток от деления
    1	10	3	1
    2	8	5	3
    3	14	4	2
Запрос можно переписать следующим образом:

    SELECT *, number1 % number2 as mod FROM numbers

Давайте выберем только те записи, в которых остаток от деления первого числа на второе меньше или равен двум (это будут 1-я и 3-я записи):

    SELECT * FROM numbers WHERE MOD(number1, number2)<=2
SQL запрос выберет следующие строки:

    id
    айди	number1
    число1	number2
    число2
    1	10	3
    3	14	4
Запрос можно переписать следующим образом:

    SELECT * FROM numbers WHERE number1 % number2 <= 2
## PI
Возвращает значение PI, отображаемое с 6 десятичными знаками
## POW
Возвращает m, возведенное в n-ую мощность
### TR
Функция `POW` возводит число в заданную степень.

См. также функцию `sqrt`, которая извлекает корень из числа.

Синтаксис

    SELECT POW(число, степень_числа) FROM имя_таблицы WHERE условие

Первый пример будет по этой таблице numbers:

    id
    айди	number
    число
    1	2
    2	3
    3	4

В данном примере содержимое поля number возводится во вторую степень:

    SELECT *, POW(number, 2) as pow FROM numbers
SQL запрос выберет следующие строки:

    id
    айди	number
    число	pow
    степень числа
    1	2	4
    2	3	9
    3	4	16
Меняем таблицу для примеров
Остальные примеры будут по этой таблице numbers:

    id
    айди	number1
    число1	number2
    число2
    1	2	4
    2	3	3
    3	5	2
Пример 
В данном примере содержимое поля number1 возводится в содержимое поля number2:

    SELECT *, POW(number1, number2) as pow FROM numbers
SQL запрос выберет следующие строки:

    id
    айди	number1
    число1	number2
    число2	pow
    степень числа
    1	2	4	16
    2	3	3	27
    3	5	2	25
Пример 
Давайте выберем только те записи, в которых степень первого числа больше или равна 20-ти (это будут 2-я и 3-я записи):

    SELECT * FROM numbers WHERE POW(number1, number2)>=20
SQL запрос выберет следующие строки:

    id
    айди	number1
    число1	number2
    число2
    2	3	3
    3	5	2
## POWER
Возвращает m, возведенное в n-ую мощность
## RADIANS
Преобразует значение в градусах в радианы
## RAND
Возвращает случайное число или случайное число в пределах диапазона
### TR
Функция `RAND` возвращает случайное дробное число от 0 до 1.

Синтаксис

    SELECT RAND() FROM имя_таблицы WHERE условие
    SELECT RAND(число) FROM имя_таблицы WHERE условие
## ROUND
Возвращает число, округленное до определенного числа десятичных разрядов
### TR
Функция `ROUND` используется для округления дробей до нужного знака в дробной части.

См. также функцию `truncate`, которая усекает числа до нужного знака.

    См. также функцию ceiling, которая округляет дроби в большую сторону.

См. также функцию `floor`, которая округляет дроби в меньшую сторону.

Синтаксис
Округление до целого:

    SELECT ROUND(поле) FROM имя_таблицы WHERE условие
Округление до определенного знака в дробной части:

    SELECT ROUND(поле, сколько_знаков_оставить) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100.129
    2	Петя	24	200.391
    3	Вася	25	300.934

В данном примере дробная зарплата округляется до целых при выборке:

    SELECT *, ROUND(salary) as salary FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100
    2	Петя	24	200
    3	Вася	25	301

В данном примере дробная зарплата округляется до двух знаков после точки:

    SELECT *, ROUND(salary, 2) as salary FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100.13
    2	Петя	24	200.39
    3	Вася	25	300.93
 
В данном примере дробная зарплата округляется до одного знака после точки:

    SELECT *, ROUND(salary, 1) as salary FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100.1
    2	Петя	24	200.4
    3	Вася	25	300.9

В данном примере дробная зарплата округляется до целых (0 соответствует целому числу):

    SELECT *, ROUND(salary, 0) as salary FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100
    2	Петя	24	200
    3	Вася	25	301
## SIGN
Возвращает значение, указывающее знак числа
### TR
Функция `SIGN` определяет знак числа. Если число больше нуля - функция вернет 1, если меньше нуля - вернет -1, а если равно нулю - вернет 0.

См. также функцию `abs`, которая находит модуль числа (из отрицательного делает положительное).

Синтаксис

    SELECT SIGN(поле) FROM имя_таблицы WHERE условие
    
Все примеры будут по этой таблице weather, если не сказано иное:

id
айди	date
дата	temperature
температура
1	2010-06-01	25
2	2010-14-01	0
3	2010-12-01	-25

Давайте определим знак температуры и запишем его в поле sign:

    SELECT *, SIGN(temperature) as sign FROM weather
SQL запрос выберет следующие строки:

    id
    айди	date
    дата	temperature
    температура	sign
    знак температуры
    1	2010-06-01	25	1
    2	2010-14-01	0	0
    3	2010-12-01	-25	-1
Меняем таблицу для примеров
Давайте изменим таблицу weather так, чтобы в ней хранился знак температуры, а не ее значение:

id
айди	date
дата	sign
знак температуры
1	2010-12-01	-1
2	2010-14-01	0
3	2010-06-01	1

Давайте теперь добавим новую запись в таблицу так, чтобы mySQL сам вычислил знак температуры:

    INSERT INTO weather SET date='2010-12-02', sign=SIGN(-30)
SQL запрос выберет следующие строки:

    id
    айди	date
    дата	sign
    знак температуры
    1	2010-12-01	-1
    2	2010-14-01	0
    3	2010-06-01	1
    4	2010-12-02	-1
## SIN
Возвращает синус числа
## SQRT
Возвращает квадратный корень числа
### TR
Функция `SQRT` находит квадратный корень из числа.

См. также функцию `round`, с помощью которой можно округлять дроби.

См. также функцию `pow`, которая возводит число в заданную степень.

Синтаксис

    SELECT SQRT(положительное_число) FROM имя_таблицы WHERE условие

Первый пример будет по этой таблице numbers:

    id
    айди	number
    число
    1	4
    2	9
    3	16

Давайте при выборке из таблицы извлечем корень из числа и запишем его в колонку sqrt:

    SELECT *, SQRT(number) as sqrt FROM numbers
SQL запрос выберет следующие строки:

    id
    айди	number
    число	sqrt
    корень числа
    1	4	2
    2	9	3
    3	16	4
## SUM
Возвращает суммированное значение выражения
### TR
Функция SUM суммирует значения указанного поля по всем выбранным строкам.

К примеру, если у нас есть поле 'зарплата', мы можем найти суммарную зарплату всех работников.

См. также функцию avg, которая находит среднее арифметическое (сумма, деленная на количество).

См. также функцию `max`, которая возвращает максимальное значение.

См. также функцию `min`, которая возвращает минимальное значение.

Синтаксис

    SELECT SUM(поле) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100
    2	Петя	24	200
    3	Вася	25	300

Давайте найдем суммарную зарплату всех работников:

    SELECT SUM(salary) as sum FROM workers
Результат выполнения SQL запроса:

    sum
    суммарная зарплата
    600

Давайте найдем суммарную зарплату тех работников, у которых id меньше 3-х:

    SELECT SUM(salary) as sum FROM workers WHERE id<3
Результат выполнения SQL запроса:

    sum
    суммарная зарплата
    300

## TAN
Возвращает тангенс числа
## TRUNCATE
Возвращает число, усеченное до определенного числа десятичных разрядов
### TR
Функция `TRUNCATE` округляет число до определенного знака, но не по правилам математического округления, а просто отбрасывая лишние знаки.

См. также функцию `round`, которая округляет дроби до нужного знака или до целого числа.

См. также функцию `ceiling`, которая округляет дроби в большую сторону.

См. также функцию `floor`, которая округляет дроби в меньшую сторону.

Синтаксис

    SELECT TRUNCATE(поле, сколько_знаков_оставить) FROM имя_таблицы WHERE условие
     
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100.339
    2	Петя	24	100.331

В данном примере зарплата усекается до двух знаков после точки:

    SELECT *, TRUNCATE(salary, 2) as salary FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	age
    возраст	salary
    зарплата
    1	Дима	23	100.33
    2	Петя	24	100.33

# Дата 
Функции	Описание
## ADDDATE
Возвращает дату после добавления определенного интервала времени/даты
## ADDTIME
Возвращает время/DateTime после добавления определенного временного интервала
## CURDATE
Возвращает текущую дату
## CURRENT_DATE
Возвращает текущую дату
### TR
Функция `CURRENT_DATE` возвращает текущую дату в формате год-месяц-день.

См. также функцию now, которая возвращает текущий момент времени в формате год-месяц-день часы:минуты:секунды.

См. также функцию current_time, возвращает текущее время в формате часы:минуты:секунды.

Синтаксис
При выборке:

    SELECT FROM имя_таблицы WHERE date = CURRENT_DATE()
При вставке:

    INSERT INTO имя_таблицы SET date = CURRENT_DATE()
 
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    какая-то дата
    1	Дима	2010-03-01
    2	Петя	2011-04-02
    3	Вася	2045-05-03
    4	Коля	2046-06-04
Пример 
В данном примере выбираются все работники, у которых дата больше текущей:

    SELECT * FROM workers WHERE date > CURRENT_DATE()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    какая-то дата
    3	Вася	2045-05-03
    4	Коля	2046-06-04
  
В данном примере выбираются все работники, у которых дата меньше текущей:

    SELECT * FROM workers WHERE date < CURRENT_DATE()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    какая-то дата
    1	Дима	2010-03-01
    2	Петя	2011-04-02
  
В данном примере в базу добавляется работник, при этом в поле date записывается текущая дата с помощью `current_date`:

    INSERT INTO workers SET name='Иван', date=CURRENT_DATE()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    какая-то дата
    1	Дима	2010-03-01
    2	Петя	2011-04-02
    3	Вася	2045-05-03
    4	Коля	2046-06-04
    5	Иван	2020-03-24

## CURRENT_TIME
Возвращает текущее время
### TR
Функция `CURRENT_TIME` возвращает текущее время в формате часы:минуты:секунды.

См. также функцию now, которая возвращает текущий момент времени в формате год-месяц-день часы:минуты:секунды.

См. также функцию `current_date`, которая возвращает текущую дату в формате год-месяц-день.

Синтаксис
При выборке:

    SELECT FROM имя_таблицы WHERE time=CURRENT_TIME()
При вставке:

    INSERT INTO имя_таблицы SET time=CURRENT_TIME()
 
Все примеры будут по этой таблице workers, если не сказано иное, текущий момент времени 13:30:00:

    id
    айди	name
    имя	time
    какое-то время
    1	Дима	12:01:02
    2	Петя	13:02:03
    3	Вася	14:03:04
    4	Коля	15:04:05
  
В данном примере выбираются все работники, у которых время больше текущего:

    SELECT * FROM workers WHERE time > CURRENT_TIME()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	time
    какое-то время
    3	Вася	14:03:04
    4	Коля	15:04:05
  
В данном примере выбираются все работники, у которых время меньше текущего:

    SELECT * FROM workers WHERE time < CURRENT_TIME()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	time
    какое-то время
    1	Дима	12:01:02
    2	Петя	13:02:03
  
В данном примере в базу добавляется работник, при этом в поле date записывается текущее время с помощью `current_time`:

    INSERT INTO workers SET name='Иван', time=CURRENT_TIME()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	time
    какое-то время
    1	Дима	12:01:02
    2	Петя	13:02:03
    3	Вася	14:03:04
    4	Коля	15:04:05
    5	Иван	13:30:00
## CURRENT_TIMESTAMP
Возвращает текущую дату и время
## CURTIME
Возвращает текущее время
## DATE
Извлекает значение даты из выражения Date или DateTime
### TR
Функция `DATE` извлекает дату из даты-времени в формате год-месяц-день.

См. также функции day, month, year, hour, minute, second.

Синтаксис

    SELECT DATE(дата-время) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	datetime
    дата и время регистрации
    1	Дима	2010-03-01 12:40:50
    2	Петя	2011-04-02 13:41:51
    3	Вася	2012-05-03 14:42:52
 
В данном примере из даты извлекаются день, месяц и год одновременно:

    SELECT *, DATE(datetime) as date FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	datetime
    дата и время регистрации	date
    дата регистрации
    1	Дима	2010-03-01 12:40:50	2010-03-01
    2	Петя	2011-04-02 13:41:51	2011-04-02
    3	Вася	2012-05-03 14:42:52	2012-05-03
 
Функцию `DATE` можно использовать для того, чтобы выбрать из базы данных записи, в которых дата равна текущей, в случае, если дата хранится в формате datetime.

Это делается следующим образом с помощью current_date:

    SELECT * FROM workers WHERE DATE(datetime)=CURRENT_DATE()
## DATEDIFF
Возвращает разницу в днях между двумя значениями даты
## DATE_ADD
Возвращает дату после добавления определенного интервала времени/даты
### TR
Функция `DATE_ADD` (она же `ADDDATE`) прибавляет к дате определенный промежуток времени.

Промежуток времени, который нужно прибавить, задается в том же формате, что и для команды `interval` (смотрите ее для лучшего понимания).

См. также функцию `date_sub`, с помощью которой можно отнимать даты.

Синтаксис

    SELECT DATE_ADD(дата, INTERVAL что_прибавить) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата
    1	Дима	2010-03-01 12:01:02
    2	Петя	2011-04-02 13:02:03
    3	Вася	2012-05-03 14:03:04
 
В данном примере к дате прибавляется 1 день:

    SELECT *, DATE_ADD(date, 1 DAY) as new_date FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата	new_date
    новая дата
    1	Дима	2010-03-01 12:01:02	2010-03-02 12:01:02
    2	Петя	2011-04-02 13:02:03	2011-05-03 13:02:03
    3	Вася	2012-05-03 14:03:04	2012-06-04 14:03:04
## DATE_FORMAT
Форматирует дату, указанную в маске форматирования
### TR
Функция `DATE_FORMAT` преобразует дату из формата год-месяц-день или формата год-месяц-день часы:минуты:секунды в другой удобный нам формат.

К примеру, из год-месяц-день можно сделать день.месяц.год или месяц--год

См. также функцию `time_format`, которая меняет формат вывода времени.

Синтаксис

    SELECT DATE_FORMAT(дата, формат) FROM имя_таблицы WHERE условие
Команды
Можно использовать следующие команды, чтобы сделать нужный формат вывода:
```
Команда	Описание
%d	День месяца, число от 00 до 31.
%e	День месяца, число от 0 до 31.
%m	Месяц, число от 01 до 12.
%c	Месяц, число от 1 до 12.
%Y	Год, число, 4 цифры.
%y	Год, число, 2 цифры.
%j	День года, число от 001 до 366.
%H	Час, число от 00 до 23.
%k	Час, число от 0 до 23.
%h	Час, число от 01 до 12.
%I	Час, число от 01 до 12.
%l	Час, число от 1 до 12.
%i	Минуты, число от 00 до 59.
%S	Секунды, число от 00 до 59.
%s	Секунды, число от 00 до 59.
%w	День недели (0 - воскресенье, 1 - понедельник).
%W	Название дня недели по-английски.
%a	Сокращенный день недели по-английски.
%M	Название месяца по-английски.
%b	Сокращенный месяц по-английски.
%D	День месяца с английским суффиксом (1st, 2nd, 3rd и т.д.).
%r	Время, 12-часовой формат (hh:mm:ss [AP]M).
%T	Время, 24-часовой формат (hh:mm:ss).
%p	AM или PM.
%U	Неделя, где воскресенье считается первым днем недели, число от 00 до 53.
%u	Неделя, где понедельник считается первым днем недели, число от 00 до 53.
%V	Неделя, где воскресенье считается первым днем недели, число от 01 до 53.Используется с `%X'.
%v	Неделя, где понедельник считается первым днем недели, число от 01 до 53.Используется с `%x'.
%X	Год для недели, где воскресенье считается первым днем недели, число, 4 цифры.Используется с '%V'.
%x	Год для недели, где воскресенье считается первым днем недели, число, 4 разряда.Используется с '%v'.
%%	Символ `%'.

```

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата регистрации
    1	Дима	2010-03-01 12:01:02
    2	Петя	2011-04-02 13:02:03
    3	Вася	2012-05-03 14:03:04
  
В данном примере при выборке создается новое поле, в котором будет лежать дата в другом формате:

    SELECT *, DATE_FORMAT(date, '%d.%m.%Y') as new_date FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата регистрации	new_date
    дата в новом формате
    1	Дима	2010-03-01 12:01:02	01.03.2010
    2	Петя	2011-04-02 13:02:03	02.04.2011
    3	Вася	2012-05-03 14:03:04	03.05.2012
## DATE_SUB
### TR
Возвращает дату после вычитания определенного интервала времени/даты
Функция `DATE_SUB` (она же SUBDATE) отнимает от даты определенный промежуток времени.

Промежуток времени, который нужно отнять, задается в том же формате, что и для команды `interval` (смотрите ее для лучшего понимания).

См. также функцию `date_add`, с помощью которой можно прибавлять даты.

Синтаксис

    SELECT DATE_SUB(дата, INTERVAL что_отнять) FROM имя_таблицы WHERE условие
 
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата
    1	Дима	2010-03-01 12:01:02
    2	Петя	2011-04-02 13:02:03
    3	Вася	2012-05-03 14:03:04
  
В данном примере от даты отнимается 1 день:

    SELECT *, DATE_SUB(date, 1 DAY) as new_date FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата	new_date
    новая дата
    1	Дима	2010-03-01 12:01:02	2010-02-28 12:01:02
    2	Петя	2011-04-02 13:02:03	2011-05-01 13:02:03
    3	Вася	2012-05-03 14:03:04	2012-06-02 14:03:04
## DAY
Возвращает часть дня значения даты
### TR
Функция `DAY` (она же DAYOFMONTH) извлекает номер дня месяца из даты.

Дата может быть в формате `date` или `datetime`.

См. также функции `month`, `year`, `hour`, `minute`, `second`, date.

Синтаксис
    
    SELECT DAY(дата) FROM имя_таблицы WHERE условие
    SELECT DAYOFMONTH(дата) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата рождения
    1	Дима	1988-03-01
    2	Петя	1989-04-02
    3	Вася	1990-05-03
 
В данном примере из даты извлекается номер дня месяца:

    SELECT *, DAY(date) as day FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	day
    день
    1	Дима	1988-03-01	1
    2	Петя	1989-04-02	2
    3	Вася	1990-05-03	3
## DAYNAME
Возвращает имя дня недели для даты
### TR
Функция `DAYNAME` возвращает название дня недели по-английски.

См. также функции `weekday` и `dayofweek` которые определяют номер дня недели.

См. также функцию `monthname`, которая возвращает название месяца по-английски.

Синтаксис

    SELECT DAYNAME(дата) FROM имя_таблицы WHERE условие
 
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата рождения
    1	Дима	1988-03-01
    2	Петя	1989-04-02
    3	Вася	1990-05-03
  
При выборке из таблицы сделаем колонку dayname, в которой будет лежать название дня рождения по-английски:

    SELECT *, DAYNAME(date) as dayname FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	dayname
    название дня недели
    1	Дима	1988-03-01	Tuesday
    2	Петя	1989-04-02	Sunday
    3	Вася	1990-05-03	Thursday
## DAYOFMONTH
Возвращает часть дня значения даты
## DAYOFWEEK
Возвращает индекс дня недели для значения даты
### TR
Функция `WEEKDAY` возвращает номер дня недели по дате.

Неделя начинается с понедельника, и он будет иметь номер 0. Соответственно 1 - вторник, 2 - среда и так далее.

См. функцию `dayofweek`, которая также определяет день недели.

См. также функцию `dayname`, которая возвращает название дня недели по-английски.

Синтаксис

    SELECT WEEKDAY(дата) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата рождения
    1	Дима	1988-03-01
    2	Петя	1989-04-02
    3	Вася	1990-05-03
 
В данном примере на экран выводится номер дня недели с помощью WEEKDAY и его название с помощью dayname:

    SELECT *, WEEKDAY(date) as day, DAYNAME(date) as dayname FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	day
    день	dayname
    название дня недели
    1	Дима	1988-03-01	1	Tuesday
    2	Петя	1989-04-02	6	Sunday
    3	Вася	1990-05-03	3	Thursday
## DAYOFYEAR
Возвращает день года для значения даты
### TR
Функция `DAYOFYEAR` возвращает номер дня года по дате. Этот номер может изменяться в диапазоне от 1 до 366.

См. также функции day, month, year, hour, minute, second, date.

Синтаксис

    SELECT DAYOFYEAR(дата) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата рождения
    1	Дима	1988-03-01
    2	Петя	1989-04-02
    3	Вася	1990-05-03

В данном примере по дате находится номер дня в году:

    SELECT *, DAYOFYEAR(date) as dayofyear FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	dayofyear
    день года
    1	Дима	1988-03-01	61
    2	Петя	1989-04-02	92
    3	Вася	1990-05-03	123
## EXTRACT
Извлечение деталей из даты
### TR
Функция `EXTRACT` извлекает отдельные части из даты или даты-времени.

См. также функции day, month, year, hour, minute, second, date, date_format.

Синтаксис

    SELECT EXTRACT(что_извлечь FROM дата) FROM имя_таблицы WHERE условие

Вместо 'что_извлечь' можно написать, к примеру, `day` - тогда из даты будет извлечен день, или, к примеру, `year` - тогда будет извлечен год. Если же я напишу так: `year_month` - то будет извлечен год и месяц (слитно, без разделителя).

Если вам нужно извлекать несколько частей не слитно, а используя разделитель - используйте `date_format`.

Форматы вывода, которые допустимо использовать (см. примеры для понимания):

    Формат	Что извлечется
    SECOND	секунды
    MINUTE	минуты
    HOUR	часы
    DAY	дни
    MONTH	месяцы
    YEAR	года
    MINUTE_SECOND	минуты и секунды слитно
    HOUR_MINUTE	часы и минуты слитно
    DAY_HOUR	дни и часы слитно
    YEAR_MONTH	года и месяцы слитно
    HOUR_SECOND	часы, минуты, секунды слитно
    DAY_MINUTE	дни, часы, минуты слитно
    DAY_SECOND	дни, часы, минуты, секунды слитно

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата рождения
    1	Дима	1988-03-01
    2	Петя	1989-04-02
    3	Вася	1990-05-03
 
В данном примере из даты извлекается день месяца:

    SELECT *, EXTRACT(DAY FROM date) as day FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	day
    день
    1	Дима	1988-03-01	1
    2	Петя	1989-04-02	2
    3	Вася	1990-05-03	3
  
В данном примере из даты извлекается год:

    SELECT *, EXTRACT(YEAR FROM date) as year FROM workers
SQL запрос выберет следующие строки:
    
    id
    айди	name
    имя	date
    дата рождения	year
    год
    1	Дима	1988-03-01	1988
    2	Петя	1989-04-02	1989
    3	Вася	1990-05-03	1990
  
В данном примере из даты извлекается год и месяц (слитно):

    SELECT *, EXTRACT(YEAR_MONTH FROM date) as yearmonth FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	yearmonth
    год и месяц
    1	Дима	1988-03-01	198803
    2	Петя	1989-04-02	198904
    3	Вася	1990-05-03	199005
## FROM_DAYS
Возвращает значение даты из числового представления дня
## INTERVAL
### TR
Команда `INTERVAL` позволяет прибавлять к дате и отнимать от нее определенные промежутки времени.

См. также функции `DATE_ADD` и `DATE_SUB`.

Синтаксис
Прибавление даты:

    SELECT дата + INTERVAL что_прибавить FROM имя_таблицы WHERE условие
Отнимание даты:

    SELECT дата - INTERVAL что_отнять FROM имя_таблицы WHERE условие
После команды `interval` можно указывать определенную часть даты (день, месяц или год и тп), к примеру, так 

    interval 1 day или interval 3 month
, или сразу несколько частей.

В этом случае значения даты берутся в кавычки, пример: давайте прибавим 1 год и 3 месяца - это будет выглядеть так: 

    interval '1-3' year_month.

Мы указываем, что хотим год и месяц (вот так: year_month), и перед этим в кавычках пишем сначала значение для года, потом значение для месяца. Между ними ставим разделитель (он может быть абсолютно любым).

Смотрите список возможных комбинаций (разделители указаны для примера, они могут быть любыми):
```
Значение	Ожидаемый формат
SECOND	секунды
MINUTE	минуты
HOUR	часы
DAY	дни
MONTH	месяцы
YEAR	года
MINUTE_SECOND	"минуты:секунды"
HOUR_MINUTE	"часы:минуты"
DAY_HOUR	"дни часы"
YEAR_MONTH	"года-месяцы"
HOUR_SECOND	"часы:минуты:секунды"
DAY_MINUTE	"дни часы:минуты"
DAY_SECOND	"дни часы:минуты:секунды"
```
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата
    1	Дима	2010-03-01 12:01:02
    2	Петя	2011-04-02 13:02:03
    3	Вася	2012-05-03 14:03:04
  
В данном примере к дате прибавляется 1 день:

    SELECT *, date + INTERVAL 1 DAY as new_date FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата	new_date
    новая дата
    1	Дима	2010-03-01 12:01:02	2010-03-02 12:01:02
    2	Петя	2011-04-02 13:02:03	2011-05-03 13:02:03
    3	Вася	2012-05-03 14:03:04	2012-06-04 14:03:04
Пример 
В данном примере от даты отнимается 1 день:

    SELECT *, date - INTERVAL 1 DAY as new_date FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата	new_date
    новая дата
    1	Дима	2010-03-01 12:01:02	2010-02-28 12:01:02
    2	Петя	2011-04-02 13:02:03	2011-05-01 13:02:03
    3	Вася	2012-05-03 14:03:04	2012-06-02 14:03:04
  
В данном примере к дате прибавляется 1 год и 2 месяца:

    SELECT *, date + INTERVAL "1-2" YEAR_MONTH as new_date FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата	new_date
    новая дата
    1	Дима	2010-03-01 12:01:02	2011-05-01 12:01:02
    2	Петя	2011-04-02 13:02:03	2012-06-02 13:02:03
    3	Вася	2012-05-03 14:03:04	2013-07-03 14:03:04
Разделитель в запросе не имеет значения. Он может быть любым символом:

    SELECT *, date + INTERVAL "1:2" YEAR_MONTH as new_date FROM workers
Можно использовать даже несколько символов:

    SELECT *, date + INTERVAL "1:::2" YEAR_MONTH as new_date FROM workers
Можно использовать и пробел:

    SELECT *, date + INTERVAL "1 2" YEAR_MONTH as new_date FROM workers
 
В данном примере к дате прибавляется 1 год, 2 месяца и 1 день:
#### 1

    SELECT
    	*, date + INTERVAL 1 YEAR + INTERVAL 2 MONTH + INTERVAL 1 DAY as new_date
    FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата	new_date
    новая дата
    1	Дима	2010-03-01 12:01:02	2011-05-02 12:01:02
    2	Петя	2011-04-02 13:02:03	2012-06-03 13:02:03
    3	Вася	2012-05-03 14:03:04	2013-07-04 14:03:04
Запрос можно переписать таким образом:

    SELECT *, date + INTERVAL "1 2" YEAR_MONTH + INTERVAL 1 DAY as new_date FROM workers
 
В данном примере к дате прибавляется 1 год, отнимаются 2 месяца и прибавляется 1 день:
#### 2

    SELECT
    	*, date + INTERVAL 1 YEAR - INTERVAL 2 MONTH + INTERVAL 1 DAY as new_date
    FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата	new_date
    новая дата
    1	Дима	2010-03-01 12:01:02	2011-01-02 12:01:02
    2	Петя	2011-04-02 13:02:03	2012-02-03 13:02:03
    3	Вася	2012-05-03 14:03:04	2013-03-04 14:03:04
## HOUR
Возвращает часовую часть значения даты
### TR
#### hour, minute, second
Функция `HOUR` извлекает часы из времени или даты-времени.

См. также функции day, month, year, minute, second, date.

Синтаксис

SELECT HOUR(время) FROM имя_таблицы WHERE условие

Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата регистрации
    1	Дима	2010-03-01 12:40:50
    2	Петя	2011-04-02 13:41:51
    3	Вася	2012-05-03 14:42:52
 
В данном примере из даты извлекаются часы, минуты и секунды:

    SELECT
    	*, HOUR(date) as hour, MINUTE(date) as minute, SECOND(date) as second
    FROM workers
     
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата регистрации	hour
    часы	minute
    минуты	second
    секунды
    1	Дима	2010-03-01 12:40:50	12	40	50
    2	Петя	2011-04-02 13:41:51	13	41	51
    3	Вася	2012-05-03 14:42:52	14	42	52
## LAST_DAY
Возвращает последний день месяца для заданной даты
## LOCALTIME
Возвращает текущую дату и время
## LOCALTIMESTAMP
Возвращает текущую дату и время
## MAKEDATE
Возвращает дату для определенного года и дня года значение
## MAKETIME
Возвращает время для определенного часа, минуты, второй комбинации
## MICROSECOND
Возвращает микросекундную часть значения даты
## MINUTE
Возвращает минутную часть значения даты
## MONTH
Returns the month portion of a date value
### TR

Функция `MONTH` извлекает номер месяца из даты.

Дата может быть в формате `date` или `datetime`.

См. также функции day, year, hour, minute, second, date.

См. также функцию monthname, которая возвращает название месяца по-английски.

Синтаксис

    SELECT MONTH(дата) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата рождения
    1	Дима	1988-03-01
    2	Петя	1989-04-02
    3	Вася	1990-05-03
Приме 
В данном примере из даты извлекается номер месяца:

    SELECT *, MONTH(date) as month FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	month
    месяц
    1	Дима	1988-03-01	3
    2	Петя	1989-04-02	4
    3	Вася	1990-05-03	5
Returns the month portion of a date value
## MONTHNAME
Возвращает полное имя месяца для даты
## NOW
Возвращает текущую дату и время
### TR
Функция `NOW` возвращает текущий момент времени в формате год-месяц-день часы:минуты:секунды.

Вместо now можно использовать функции `sysdate` и `current_timestamp`, они делают то же самое.

См. также функцию `current_date`, которая возвращает текущую дату в формате год-месяц-день.

См. также функцию `current_time`, возвращает текущее время в формате часы:минуты:секунды.

Синтаксис
При выборке:

    SELECT FROM имя_таблицы WHERE datetime = NOW()
При вставке:

    INSERT INTO имя_таблицы SET date = NOW()
Можно также использовать now совместно с функциями day, month, year, hour, minute, second, weekday, dayofweek.

К примеру, узнаем номер текущего дня недели:

    WEEKDAY(NOW())
Узнаем номер текущего года:

    YEAR(NOW())
И так далее.

Можно также использовать now совместно с `interval`.

К примеру, узнаем номер завтрашнего дня недели:

    WEEKDAY(NOW() + INTERVAL 1 DAY)
Узнаем номер текущего года:

    YEAR(NOW())
И так далее.

 
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    какая-то дата
    1	Дима	2010-03-01 12:01:02
    2	Петя	2011-04-02 13:02:03
    3	Вася	2045-05-03 14:03:04
    4	Коля	2046-06-04 15:04:05
  
В данном примере выбираются все работники, у которых дата больше текущей:

    SELECT * FROM workers WHERE date > NOW()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    какая-то дата
    3	Вася	2045-05-03 14:03:04
    4	Коля	2046-06-04 15:04:05
 
В данном примере выбираются все работники, у которых дата меньше текущей:

    SELECT * FROM workers WHERE date < NOW()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    какая-то дата
    1	Дима	2010-03-01 12:01:02
    2	Петя	2011-04-02 13:02:03
 
В данном примере в базу добавляется работник, при этом в поле date записывается текущий момент времени с помощью now:

    INSERT INTO workers SET name='Иван', date=NOW()
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    какая-то дата
    1	Дима	2010-03-01 12:01:02
    2	Петя	2011-04-02 13:02:03
    3	Вася	2045-05-03 14:03:04
    4	Коля	2046-06-04 15:04:05
    5	Иван	2020-03-24 08:58:01
## PERIOD_ADD
Занимает период и добавляет указанное количество месяцев к нему
## PERIOD_DIFF
Возвращает разницу в месяцах между двумя периодами
## QUARTER
Возвращает четвертую часть значения даты
## SECOND
Возвращает вторую часть значения даты
## SEC_TO_TIME
Преобразует числовые секунды в значение времени
### TR
Функция `SEC_TO_TIME` преобразует число в секундах в часы, минуты и секунды.

Например, 65 секунд - это 1 минута и 5 секунд, а 3665 секунд - это 1 час, 1 минута и 5 секунд (1 час = 3600 секунд).

Формат вывода будет такой: sec_to_time(65) выведет '00:01:05', а sec_to_time(3665) выведет '01:01:05'.

То есть формат вывода такой: 'часы:минуты:секунды'.

См. также функцию `time_to_sec`, которая преобразует время в формате 'часы:минуты:секунды' в секунды.

Синтаксис

    SELECT SEC_TO_TIME(секунды) FROM имя_таблицы WHERE условие
## STR_TO_DATE
Принимает строку и возвращает дату, указанную маской форматирования
## SUBDATE
Возвращает дату, после которой был вычтен определенный интервал времени/даты
## SUBTIME
Возвращает значение времени/DateTime после вычитания определенного временного интервала
## SYSDATE
Возвращает текущую дату и время
## TIME
Извлекает значение времени из выражения Time/DateTime
## TIME_FORMAT
Форматирует время, указанное в маске форматирования
### TR
Функция `TIME_FORMAT` преобразует время из формата часы:минуты:секунды в другой удобный нам формат.

См. также функцию `date_format`, которая меняет формат вывода даты-времени.

Синтаксис

    SELECT TIME_FORMAT(время, формат) FROM имя_таблицы WHERE условие
 
Команды, которые можно использовать, чтобы сделать нужный формат вывода смотрите в функции `date_format` (только те, что относятся ко времени, но не к дате).


Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	time
    время
    1	Дима	12:01:02
    2	Петя	13:02:03
    3	Вася	14:03:04
  
В данном примере при выборке создается новое поле, в котором будет лежать время в другом формате:

    SELECT *, TIME_FORMAT(time, '%Hч %iм %sс') as new_time FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	time
    время	new_time
    время в новом формате
    1	Дима	12:01:02	12ч 01м 02с
    2	Петя	13:02:03	13ч 02м 03с
    3	Вася	14:03:04	13ч 02м 03с
## TIME_TO_SEC
Преобразует значение времени в числовые секунды
### TR
Функция `TIME_TO_SEC` преобразует время в формате часы:минуты:секунды в секунды.

Например, одной минуте соответствует 60 секунд, одному часу - 3600 секунд, а часу и одной минуте - 3660 секунд.

В функцию `time_to_sec` время передается в таком формате: 'часы:минуты:секунды', к примеру 3 часа, 15 минут, 30 секунд будет выглядеть так: 03:15:30.

См. также функцию `sec_to_time`, которая преобразует секунды во время.

Синтаксис

    SELECT TIME_TO_SEC(время) FROM имя_таблицы WHERE условие
## TIMEDIFF
Возвращает разницу между двумя значениями времени/DateTime
## TIMESTAMP
Преобразует выражение в значение DateTime и при указании добавляет дополнительный временной интервал к значению
## TO_DAYS
Преобразует дату в числовые дни
### TR
Функция `TO_DAYS` вычисляет столько дней от начала нашей эры соответствует указанной дате.

Функция `to_days` не предназначена для использования с величинами, предшествующими введению григорианского календаря (1582), поскольку не учитывает дни, утерянные при изменении календаря.

См. также функцию `from_days`, которая преобразует число, соответствующее количеству дней от нашей эры, в дату.

Синтаксис

    SELECT TO_DAYS(дата) FROM имя_таблицы WHERE условие
 
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date1
    дата1	date2
    дата2
    1	Дима	2010-03-01	2010-03-04
    2	Петя	2011-04-02	2011-04-12
    3	Вася	2012-05-03	2012-05-14
  
В данном примере находится разница в днях между двумя датами:

    SELECT *, TO_DAYS(date1)-TO_DAYS(date2) as diff FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date1
    дата1	date2
    дата2	diff
    разница в днях
    1	Дима	2010-03-01	2010-03-04	3
    2	Петя	2011-04-02	2011-04-12	10
    3	Вася	2012-05-03	2012-05-14	11
## WEEK
Возвращает часть недели значения даты
### TR
Функция `WEEK` возвращает номер недели в году по дате.

При наличии одного параметра возвращает порядковый номер недели в году в диапазоне от 0 до 53 (да, возможно начало 53-й недели) для регионов, где воскресенье считается первым днем недели.

Форма `WEEK` с двумя параметрами позволяет уточнить, с какого дня начинается неделя - с воскресенья или с понедельника. Неделя начинается с воскресенья, если второй аргумент равен 0, и с понедельника - если 1.

См. также функцию yearweek, которая находит неделю и ее год по дате.

Синтаксис

    SELECT WEEK(дата) FROM имя_таблицы WHERE условие
    SELECT WEEK(дата, начало_недели) FROM имя_таблицы WHERE условие
## WEEKDAY
Возвращает индекс дня недели для значения даты
### TR
Функция `WEEKDAY` возвращает номер дня недели по дате.

Неделя начинается с понедельника, и он будет иметь номер 0. Соответственно 1 - вторник, 2 - среда и так далее.

См. функцию `dayofweek`, которая также определяет день недели.

См. также функцию `dayname`, которая возвращает название дня недели по-английски.

Синтаксис

    SELECT WEEKDAY(дата) FROM имя_таблицы WHERE условие
 
Все примеры будут по этой таблице workers, если не сказано иное:

    id
    айди	name
    имя	date
    дата рождения
    1	Дима	1988-03-01
    2	Петя	1989-04-02
    3	Вася	1990-05-03
  
В данном примере на экран выводится номер дня недели с помощью WEEKDAY и его название с помощью dayname:

    SELECT *, WEEKDAY(date) as day, DAYNAME(date) as dayname FROM workers
SQL запрос выберет следующие строки:

    id
    айди	name
    имя	date
    дата рождения	day
    день	dayname
    название дня недели
    1	Дима	1988-03-01	1	Tuesday
    2	Петя	1989-04-02	6	Sunday
    3	Вася	1990-05-03	3	Thursday
## WEEKOFYEAR
Возвращает неделю года для значения даты
## YEAR
Возвращает часть года значения даты
## YEARWEEK
Возвращает год и неделю для значения даты
### TR
Функция `YEARWEEK` возвращает номер недели в году и год по дате.

Следует учитывать, что год может отличаться от указанного в параметре date для первой и последней недель года.

Форма `YEARWEEK` с двумя параметрами позволяет уточнить, с какого дня начинается неделя - с воскресенья или с понедельника. Неделя начинается с воскресенья, если второй аргумент равен 0, и с понедельника - если 1.

См. также функцию week, которая возвращает номер недели в году.

Синтаксис

    SELECT YEARWEEK(дата) FROM имя_таблицы WHERE условие
    SELECT YEARWEEK(дата, начало_недели) FROM имя_таблицы WHERE условие
# Расширенные функции MySQL
## BIN
Преобразует десятичное число в двоичное число
## BINARY
Преобразует значение в двоичную строку
## CASE
Позволяет оценивать условия и возвращать значение при соблюдении первого условия
## CAST	
Преобразует значение из одного типа данных в другой тип данных
## COALESCE	
Возвращает первое выражение, не являющееся null, в списке
## CONNECTION_ID
Возвращает уникальный идентификатор подключения для текущего подключения
## CONV
Преобразует число из одной числовой базы в другую
## CONVERT
Преобразует значение из одного типа данных в другой или один набор символов в другой
## CURRENT_USER
Возвращает имя пользователя и имя хоста для учетной записи MySQL, используемой сервером для проверки подлинности текущего клиента
## DATABASE
Возвращает имя базы данных по умолчанию

## SESSION_USER
Возвращает имя пользователя и имя хоста для текущего пользователя MySQL
## SYSTEM_USER
Возвращает имя пользователя и имя хоста для текущего пользователя MySQL
## USER
Возвращает имя пользователя и имя хоста для текущего пользователя MySQL
## VERSION
Возвращает версию базы данных MySQL